import Dynamic_Data_Struct
import mediapipe as mp
import Dynamic_Data
import Gesture_Record


mpHands=mp.solutions.hands
mp_Pose = mp.solutions.pose

def Get_All_Landmark(pose_landmarks):
    """
    获取所有坐标放入n
    :param pose_landmarks: 人体坐标
    :rtype: n[75],n中是坐标对象
    :param multi_hand_landmarks: 手坐标
    """
    n=[]
    #存人体坐标
    for i in range(33):
        lm = Dynamic_Data_Struct.landmark_2d(pose_landmarks.landmark[mp_Pose.PoseLandmark(i).value].x,
                                  pose_landmarks.landmark[mp_Pose.PoseLandmark(i).value].y,)  # 一个2d坐标对象
        n.append(lm)

    return n


"""坐标变换和远近标准化（标准化没做，让每次人基本和框一样高暂时）"""

def transform_std(lm_1shot):
    """
    对一帧所有坐标进行坐标变换和标准化
    以11和12的中点为坐标原点
    :param lm_1shot: 一帧所有坐标
    :return lm_1shot: 坐标变换和标准化后的1帧坐标
    """
    """方案1：坐标原点（11和12）的中心位置"""

    lm_1shot[11]
    origin_x=(lm_1shot[11].x+lm_1shot[12].x)/2.0
    origin_y=(lm_1shot[11].y+lm_1shot[12].y)/2.0

    # """方案2：坐标原点（11，12，23，,24的几何中心）的中心位置"""
    #
    # lm_1shot[11]
    # origin_x=(lm_1shot[11].x+lm_1shot[12].x)/2.0
    # origin_y=(lm_1shot[11].y+lm_1shot[12].y)/2.0
    """远近标准:看左右脚哪个更低，算鼻子到着地脚的铅直距离"""
    Tall_Std=0
    if lm_1shot[30].y>lm_1shot[29].y:
        Tall_Std = lm_1shot[30].y - lm_1shot[0].y
    else:
        Tall_Std=lm_1shot[29].y - lm_1shot[0].y

    """坐标变换"""
    for i in range(Dynamic_Data.LM_SUM):
        lm_1shot[i].x=(lm_1shot[i].x-origin_x)*(1/Tall_Std)
        lm_1shot[i].y = (lm_1shot[i].y - origin_y)*(1/Tall_Std)

    return lm_1shot

if __name__ == '__main__':
    lm_1shot=Gesture_Record.Read()[0]
    lm_1shot=transform_std(lm_1shot)
    p=1